const puppeteer = require("puppeteer");
const fs = require('fs');

(async function () {
    // Launch the browser and open a new blank page
    const browser = await puppeteer.launch({
        headless: false, // 设置为 true 时会启动无头浏览器
        args: ["--no-sandbox", "--disable-setuid-sandbox"],
        executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' // 指定 Chrome 浏览器的路径
    });

    const page = await browser.newPage();

    // 访问网页之前执行脚本
    await page.evaluateOnNewDocument(() => {
        // 删除 window.navigator.webdriver 属性
        delete navigator.__proto__.webdriver;
    });

    await page.setViewport({width: 1080, height: 1024});

    // 模拟用户代理
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3');

    // Navigate the page to a URL.
    await page.goto(
        "https://www.nhc.gov.cn/yzygj/c100067/202112/d603b13798414fc38c1a19dd94b0648a.shtml"
        , {
            waitUntil: "networkidle2"
        });

    console.log("开始执行脚本")
    const {mainEl, title} =
        await page.evaluate(() => {
            const mainList = document.querySelector(".list");
            console.log("测试内容", mainList)

            // 删除 .list 里面的操作按钮
            // document.querySelector(".list .fr").remove()

            // 获取 title
            const title = document.querySelector("title").text;

            return {mainEl: mainList.textContent, title}
        });
    console.log(title)
    console.log(mainEl)

    // const saveImg = (path) => {
    //     console.log("有人调用 saveImg 方法了", path);
    // };
    //
    // // 和 eval 一致 只能传递数据, 不能传递方法, 方法函数是不可以直接通过参数传递的形式供内部浏览器使用, 后面我们会介绍另一种形式实现。
    // const evaluate = await page.evaluate((saveImg) => {
    //     console.log(saveImg);
    //     return "这是传递的数据";
    // }, saveImg);
    // console.log(evaluate);

    // fs.writeFileSync(`./files/${title}.txt`, mainEl.textContent, "utf-8");

    // await browser.close();
})();
